package cc.comac.mom.datahandlers.entity;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import cc.comac.mom.bean.EquipSparePartEquipRelation;
import cc.comac.mom.bean.EquipSparePartEquipRelationBean;
import cc.comac.mom.bean.ResultDev;
import cc.comac.mom.dao.entity.EquipSparePartEquipRelationDao;
import cc.comac.mom.entity.EquipSparePartEquipRelationEntity;
import cc.comac.mom.util.BaseEntityDataUtil;
import cc.comac.mom.util.ResultBean;
@Component
@Transactional
public class EquipSparePartEquipRelationDataHandler extends ServiceImpl<EquipSparePartEquipRelationDao, EquipSparePartEquipRelationEntity>{

	@Autowired
	private EquipSparePartEquipRelationDao equipSparePartEquipRelationDao;
	@Autowired
	private BaseEntityDataUtil baseEntityDataUtil;
	public ResultBean insertSparePartEquip(EquipSparePartEquipRelation equipSparePartEquipRelation) {
		ResultBean resultBean = new ResultBean(true);
		EquipSparePartEquipRelationEntity innerData = equipSparePartEquipRelation.getInnerData();
		if (innerData.getSparePartId() == 0) {
			throw new RuntimeException("备件数据不能为空，新增失败");
		}
		if (innerData.getEquipDevId() == 0) {
			throw new RuntimeException("设备主数据数据不能为空,新增失败");
		}
		QueryWrapper<EquipSparePartEquipRelationEntity> queryWrapper = new QueryWrapper<EquipSparePartEquipRelationEntity>();
		queryWrapper.eq("row_status", 1);
		queryWrapper.eq("spare_part_id", innerData.getSparePartId());
		queryWrapper.eq("equip_dev_id", innerData.getEquipDevId());
		List<EquipSparePartEquipRelationEntity> selectList = equipSparePartEquipRelationDao.selectList(queryWrapper);
		if (selectList.size()>0) {
			throw new RuntimeException("当前备件下已存在新增设备！，新增失败");
		}
		baseEntityDataUtil.setBaseEntityData(innerData);
		int insert = equipSparePartEquipRelationDao.insert(innerData);
		if (insert != 1) {
			throw new RuntimeException("新增失败！新增数量为"+insert);
		}
		return resultBean;
	}
	
	public ResultBean updateSparePartEquip(EquipSparePartEquipRelation equipSparePartEquipRelation) {
		ResultBean resultBean = new ResultBean(true);
		EquipSparePartEquipRelationEntity innerData = equipSparePartEquipRelation.getInnerData();
		if (innerData.getId() == 0) {
			throw new RuntimeException("当前未选中数据，无法编辑");
		}
		if (innerData.getEquipDevId() != 0 && innerData.getSparePartId() != 0) {
			QueryWrapper<EquipSparePartEquipRelationEntity> queryWrapper = new QueryWrapper<EquipSparePartEquipRelationEntity>();
			queryWrapper.eq("row_status", 1);
			queryWrapper.eq("spare_part_id", innerData.getSparePartId());
			queryWrapper.eq("equip_dev_id", innerData.getEquipDevId());
			queryWrapper.ne("spare_part_equip_id", innerData.getId());
			List<EquipSparePartEquipRelationEntity> selectList = equipSparePartEquipRelationDao.selectList(queryWrapper);
			if (selectList.size() > 0) {
				throw new RuntimeException("当前备件下已存在编辑设备，编辑失败！");
			}
		}
		int updateById = equipSparePartEquipRelationDao.updateById(innerData);
		if (updateById != 1) {
			throw new RuntimeException("编辑失败，编辑数量"+ updateById);
		}
		return resultBean;
	}
	
	public ResultBean batchDelete (List<EquipSparePartEquipRelation> list) {
		ResultBean resultBean = new ResultBean(true);
		if (list.size() > 0) {
			// 预留删除校验
			// .....
			List<EquipSparePartEquipRelationEntity> list1 = new ArrayList<>();
			for (EquipSparePartEquipRelation equipSparePartEquipRelation : list) {
				EquipSparePartEquipRelationEntity innerData = equipSparePartEquipRelation.getInnerData();
				EquipSparePartEquipRelationEntity equipSparePartEquipRelationEntity = new EquipSparePartEquipRelationEntity();
				equipSparePartEquipRelationEntity.setId(innerData.getId());
				equipSparePartEquipRelationEntity.setRowStatus(0);
				baseEntityDataUtil.updateBaseEntityData(equipSparePartEquipRelationEntity);
				list1.add(equipSparePartEquipRelationEntity);
			}
			
			boolean updateBatchById = updateBatchById(list1, list1.size());
			if (!updateBatchById) {
				throw new RuntimeException("删除失败！");
			}
		}
		return resultBean;
	}
	
	public ResultDev selectBysomeFields (EquipSparePartEquipRelation equipSparePartEquipRelation) {
		ResultDev resultDev = new ResultDev();
		if (equipSparePartEquipRelation.getPageNum() == 0) {
			equipSparePartEquipRelation.setPageNum(1);
		}
		if (equipSparePartEquipRelation.getPageSize() == 0) {
			equipSparePartEquipRelation.setPageSize(10);
		}
		equipSparePartEquipRelation.setSparePartId(equipSparePartEquipRelation.getInnerData().getSparePartId());
		equipSparePartEquipRelation.setPageNum((equipSparePartEquipRelation.getPageNum()-1)*equipSparePartEquipRelation.getPageSize());
		List<EquipSparePartEquipRelationBean> selectBySomeFields = equipSparePartEquipRelationDao.selectBySomeFields(equipSparePartEquipRelation);
		long selectcount = equipSparePartEquipRelationDao.selectcount();
		resultDev.setEntityList(selectBySomeFields);
		// 将查询总数除以每页数量后向上取整获取总页数
		double pageCount = Math.ceil((double)selectcount / equipSparePartEquipRelation.getPageSize());
		resultDev.setPageCount((int)pageCount);
		resultDev.setTotalQuantity((int)selectcount);
		return resultDev;
	}
	
}
